package _240229;
import java.util.*;

public class Main05 {
    // 显示图案
    static void show(byte[][] buf) {
        for (int i = 0; i < buf.length; i++) {
            for (int j = 0; j < buf[i].length; j++) {
                System.out.print(buf[i][j] == 0 ? ' ' : 'o');
            }
            System.out.println();
        }
    }

    /**
     * 构造图案
     * @param buf  存储图案的数组
     * @param x    图案中心的横坐标
     * @param y    图案中心的纵坐标
     * @param size 图案宽度
     */
    static void draw(byte[][] buf, int x, int y, int size) {
        if (size == 1) {
            buf[y][x] = 1; // 注意x、y参数的位置
            return;
        }

        int n = size / 3; // 填空
        // 递归地画每一部分
        draw(buf, x, y, n);// 画中间的图案
        draw(buf, x - n, y, n);// 画左边的图案，横坐标左移
        draw(buf, x + n, y, n);// 画右边的图案，横坐标右移
        draw(buf, x, y - n, n);// 画上面的图案，纵坐标上移
        draw(buf, x, y + n, n);// 画下面的图案，纵坐标下移
    }

    public static void main(String[] args) {
        final int N = 3; // 要输出n=3时的情况
        int t = 1; // 图案的宽度
        for (int i = 0; i < N; i++)
            t *= 3;
        // 此时t为27
        // 数组存储图案
        byte[][] buf = new byte[t][t];
        draw(buf, t / 2, t / 2, t);
        show(buf);
    }
}